package keye.document_manage.dao.sqlserver;

import java.util.HashMap;
import java.util.List;

import keye.document_manage.domain.TableInterfaceListView;
import keye.document_manage.entity.Page;
import keye.document_manage.entity.SelectParameters;
import keye.document_manage.util.MySqlProvider;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;

public interface BaseDaoSqlserver<T> {

	default List<T> select(){
		return null;
	}

	@SelectProvider(type=MySqlProvider.class, method = "executeSQL")
	List<HashMap<String, Object>> executeSelecetSQL(@Param("sql") String selecetSQL);
	
	@Select("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME=#{tableName}")
	List<String> getPrimaryKey(String tableName);
	
	@Select("select * from ${tableName}")
	List<HashMap<String, Object>> getAll(@Param("tableName") String tableName);
	
	
	/**
	 * 根据查询条件得出所有结果
	 * @param tableName 表名
	 * @param selectParas	查询条件
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getWithParas")
	List<HashMap<String, Object>> getAllWithParas(@Param("tableName") String tableName, @Param("where") List<SelectParameters> selectParas);
	
	/**
	 * 根据查询条件得出分页结果
	 * @param tableName 表名
	 * @param selectParas	查询条件
	 * @param tableFiled 查询字段
	 * @param page	分页对象
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getListWithParasByPage")
	List<HashMap<String, Object>> getListWithParasByPage(@Param("tableName") String tableName,@Param("where") List<SelectParameters> selectParas, @Param("tableFiled") List<TableInterfaceListView> tableFiled,@Param("page") Page page);
	
	/**
	 * 根据查询条件得出分页结果
	 * @param tableName 表名
	 * @param selectParas	查询条件
	 * @param tableFiled 查询字段
	 * @param page	分页对象
	 * @param where where语句后面的查询条件
	 * @return
	 * @author cdg 2016-2-24 16:55:26
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getListWithDiyParasByPage")
	List<HashMap<String, Object>> getListWithDiyParasByPage(@Param("tableName") String tableName,@Param("where") List<SelectParameters> selectParas, @Param("tableFiled") List<TableInterfaceListView> tableFiled,@Param("page") Page page,@Param("diyWhere") String where);
	
	/**
	 * 查询指定显示字段的表结果
	 * @param tableName  表名
	 * @param tableFiled  表里查询的字段
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getList")
	List<HashMap<String, Object>> getList(@Param("tableName") String tableName, @Param("tableFiled") List<TableInterfaceListView> tableFiled);
	
	/**
	 * 以分页的形式查询指定显示字段的表结果
	 * @param tableName  表名
	 * @param tableParas  表里查询的字段
	 * @param page 分页对象
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getList")
	List<HashMap<String, Object>> getListByPage(@Param("tableName") String tableName, @Param("tableFiled") List<TableInterfaceListView> tableFiled,@Param("page") Page page);
	
	/**
	 * 获取表要显示的字段
	 * @param tableName	表名
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getParamters")
	@ResultMap(value="keye.document_manage.dao.sqlserver.TableInterfaceListViewDao.BaseResultMap")
	List<TableInterfaceListView> getParamters(@Param("tableName") String tableName);
	
	
//	@SelectProvider(type=MySqlProvider.class, method = "getType")
//	HashMap<String, String> getFiledAndType(@Param("tableName") String tableName);
	
	/**
	 * 获取表查询字段的 类型
	 * @param tableName 表名
	 * @param selectParas 查询字段
	 * @return
	 */
	@SelectProvider(type=MySqlProvider.class, method = "getType")
	List<HashMap<String, Object>> getFiledType(@Param("tableName") String tableName, @Param("selectParas") List<SelectParameters> selectParas);
}
